package com.github.shiqiyue.app.modules.sys.task;


import com.github.shiqiyue.app.config.file.FileService;
import com.github.shiqiyue.app.config.file.LocalFileSaveResult;
import com.github.shiqiyue.app.config.file.OssFileSaveResult;
import com.github.shiqiyue.app.modules.sys.entity.FileExport;
import com.github.shiqiyue.app.modules.sys.enums.FileExportStatusEnum;
import com.github.shiqiyue.app.modules.sys.service.IFileExportService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.File;

/***
 * 文件导出任务
 * @author wenyao.wu
 * @since 2020年5月20日
 */
@Slf4j
@Data
public abstract class FileExportTask implements Runnable {


    private String filePath;

    private Long fileExportId;

    private IFileExportService fileExportService;

    private FileService fileService;


    public abstract void doTask() throws Exception;

    @Override
    public void run() {
        try {
            doTask();
        } catch (Exception e) {
            log.error("导出失败,fileExportId:" + fileExportId, e);
            FileExport updateParam = new FileExport();
            updateParam.setId(fileExportId);
            updateParam.setExportStatus(FileExportStatusEnum.FAIL.getValue());
            fileExportService.updateById(updateParam);
            return;
        }
        LocalFileSaveResult fileSaveResult = fileService.uploadFile(filePath);
        FileExport updateParam = new FileExport();
        updateParam.setId(fileExportId);
        updateParam.setDownloadUrl(fileSaveResult.getFileUrl());
        updateParam.setExportStatus(FileExportStatusEnum.SUCCESS.getValue());
        fileExportService.updateById(updateParam);
    }
}